/**
 * 研发项目资源数据模型
 */

const BaseProjectModel = require('./base_project_model.js');

class ResearchProjectResourceModel extends BaseProjectModel {

    /**
     * 构造函数
     */
    constructor() {
        super();

        // 设置数据集合
        this.CL = this.constructor.C('research_project_resource');

        // 字段字典
        this.DAO_FIELD_PREFIX = "RR"; // 表前缀
    }

    /**
     * 获取资源版本字段结构
     */
    static get DB_STRUCTURE() {
        return {
            _id: 'string|id',
            RR_PROJECT_ID: 'string|id|must',               // 项目ID
            RR_NAME: 'string|min:2|max:50|must',           // 版本名称
            RR_DESCRIPTION: 'string|max:500',              // 版本描述
            RR_FILE_URL: 'string|max:500',                 // 文件链接
            RR_CREATE_TIME: 'int|must',                    // 创建时间
            RR_VERSION: 'string|max:20',                   // 版本号
            RR_TYPE: 'string|max:20',                      // 资源类型
            RR_SIZE: 'int',                                // 文件大小
            RR_USER_ID: 'string',                          // 上传用户ID
            RR_USER_NAME: 'string',                        // 上传用户姓名
            
            // 兼容controller使用的字段
            projectId: 'string|false',                     // 项目ID
            name: 'string|false',                          // 资源名称
            description: 'string|false',                   // 资源描述
            fileUrl: 'string|false',                       // 文件链接
            createTime: 'int|false',                       // 创建时间
            version: 'string|false',                       // 版本号
            type: 'string|false',                          // 资源类型
            size: 'int|false',                             // 文件大小
            userId: 'string|false',                        // 上传用户ID
            userName: 'string|false'                       // 上传用户姓名
        };
    }

    /**
     * 获取项目资源版本列表
     */
    async getResourceList(projectId, options = {}) {
        // 设置排序条件
        let orderBy = {
            RR_CREATE_TIME: -1
        };

        // 设置分页
        let page = options.page || 1;
        let size = options.size || 10;
        let offset = (page - 1) * size;
        let limit = size;

        // 设置查询条件
        let where = {
            RR_PROJECT_ID: projectId
        };

        // 查询记录总数
        let total = await ResearchProjectResourceModel.count(where);

        // 查询记录
        let list = await this.getAll(where, orderBy, offset, limit);

        // 格式化返回结果
        let result = [];
        for (let k = 0; k < list.length; k++) {
            let item = this._getItem(list[k]);
            result.push(item);
        }

        return {
            total,
            list: result
        };
    }

    /**
     * 添加项目资源版本
     */
    async addResource(data) {
        // 确保有创建时间
        data.RR_CREATE_TIME = this._timestamp;
        
        // 兼容controller传入的字段格式
        if (data.projectId && !data.RR_PROJECT_ID) {
            data.RR_PROJECT_ID = data.projectId;
        }
        
        if (data.name && !data.RR_NAME) {
            data.RR_NAME = data.name;
        }
        
        if (data.description && !data.RR_DESCRIPTION) {
            data.RR_DESCRIPTION = data.description;
        }
        
        if (data.fileUrl && !data.RR_FILE_URL) {
            data.RR_FILE_URL = data.fileUrl;
        }
        
        if (data.createTime && !data.RR_CREATE_TIME) {
            data.RR_CREATE_TIME = data.createTime;
        }
        
        if (data.version && !data.RR_VERSION) {
            data.RR_VERSION = data.version;
        }
        
        if (data.type && !data.RR_TYPE) {
            data.RR_TYPE = data.type;
        }
        
        if (data.size && !data.RR_SIZE) {
            data.RR_SIZE = data.size;
        }
        
        if (data.userId && !data.RR_USER_ID) {
            data.RR_USER_ID = data.userId;
        }
        
        if (data.userName && !data.RR_USER_NAME) {
            data.RR_USER_NAME = data.userName;
        }
        
        return await this.insert(data);
    }

    /**
     * 获取资源版本详情
     */
    async getResourceDetail(id) {
        // 根据ID查询
        let where = {
            _id: id
        };

        let data = await this.getOne(where);
        if (!data) return null;

        return this._getItem(data);
    }

    /**
     * 提取数据项
     */
    _getItem(data) {
        // 提取数据
        let item = {
            id: data._id,
            projectId: data.RR_PROJECT_ID,
            name: data.RR_NAME,
            description: data.RR_DESCRIPTION || '',
            fileUrl: data.RR_FILE_URL || '',
            createTime: data.RR_CREATE_TIME,
            version: data.RR_VERSION || '',
            type: data.RR_TYPE || '',
            size: data.RR_SIZE || 0,
            userId: data.RR_USER_ID || '',
            userName: data.RR_USER_NAME || ''
        };

        return item;
    }
}

module.exports = new ResearchProjectResourceModel(); 